/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamankomponenanggaranbiayagaji;

import org.sadhar.sia.framework.ClassApplicationModule;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Space;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 *
 * @author hendro
 */
public class PerekamanKomponenAnggaranBiayaGajiWnd extends ClassApplicationModule {

    private Combobox cmbboxTahunKomponen;
    private Radio rdKomponenGajiYa;
    private Radio rdKomponenGajiTidak;
    private Combobox cmbboxKomponenPegawai;
    private Textbox txtboxNamaKomponen;
    private Textbox txtboxKdKomponenGaji;
    private Textbox txtboxAlias;
    private Textbox txtboxRumus;
    private Listbox lstboxKomponenAnggaranGaji;
    private Toolbarbutton toolbarTambahKomponen;
    private Toolbarbutton toolbarTambahSimbol;
    private Textbox idKomponenPegawai;
    private Button btnBatal;
    private Button btnCariNamaKomponen;
    private Textbox txtboxIdKomponen;
    private Radiogroup rdGroupKomponenGaji;
    private PerekamanKomponenAnggaranBiayaGajiDAO dao;

    public PerekamanKomponenAnggaranBiayaGajiWnd() {
        dao = new PerekamanKomponenAnggaranBiayaGajiDAOImpl();
    }

    public void onCreate() throws Exception {
        txtboxIdKomponen = (Textbox) getFellow("txtboxIdKomponen");
        cmbboxTahunKomponen = (Combobox) getFellow("cmbboxTahunKomponen");
        rdKomponenGajiYa = (Radio) getFellow("rdKomponenGajiYa");
        rdKomponenGajiTidak = (Radio) getFellow("rdKomponenGajiTidak");
        cmbboxKomponenPegawai = (Combobox) getFellow("cmbboxKomponenPegawai");
        txtboxNamaKomponen = (Textbox) getFellow("txtboxNamaKomponen");
        txtboxAlias = (Textbox) getFellow("txtboxAlias");
        txtboxRumus = (Textbox) getFellow("txtboxRumus");
        txtboxKdKomponenGaji = (Textbox) getFellow("txtboxKdKomponenGaji");
        toolbarTambahKomponen = (Toolbarbutton) getFellow("toolbarTambahKomponen");
        toolbarTambahSimbol = (Toolbarbutton) getFellow("toolbarTambahSimbol");
        idKomponenPegawai = (Textbox) getFellow("idKomponenPegawai");
        lstboxKomponenAnggaranGaji = (Listbox) getFellow("lstboxKomponenAnggaranGaji");
        btnBatal = (Button) getFellow("btnBatal");
        btnCariNamaKomponen = (Button) getFellow("btnCariNamaKomponen");
        rdGroupKomponenGaji = (Radiogroup) getFellow("rdGroupKomponenGaji");
        loadTahunAnggaran();
        loadNamaKomponen();
        loadKomponenAnggaranGaji();
        rdKomponenGajiTidak.setChecked(true);
        btnCariNamaKomponen.setVisible(false);
    }

    public void rdGroupKomponenGajiOnCheck() throws Exception {
        if(rdKomponenGajiTidak.isChecked()){
            btnCariNamaKomponen.setVisible(false);
        }else{
            btnCariNamaKomponen.setVisible(true);
        }
    }

    private void clearComponen() throws Exception {
        txtboxIdKomponen.setValue("");
        cmbboxTahunKomponen.setValue("");
        rdKomponenGajiTidak.setSelected(true);
        rdKomponenGajiYa.setSelected(false);
        cmbboxKomponenPegawai.setValue("");
        idKomponenPegawai.setValue("");
        txtboxNamaKomponen.setValue("");
        txtboxKdKomponenGaji.setValue("");
        txtboxAlias.setValue("");
        txtboxRumus.setValue("");
    }

    private void loadTahunAnggaran() throws Exception {
        cmbboxTahunKomponen.getItems().clear();
        for (String str : dao.loadTahun()) {
            cmbboxTahunKomponen.appendChild(new Comboitem(str));
        }
    }

    private void loadNamaKomponen() throws Exception {
        cmbboxKomponenPegawai.getItems().clear();
        for (KomponenPegawai k : dao.loadKomponePegawai()) {
            Comboitem item = new Comboitem();
            item.setValue(k);
            item.setLabel(k.getNm_stat_edu());
            cmbboxKomponenPegawai.appendChild(item);
        }
    }

    private void loadKomponenAnggaranGaji() throws Exception {
        lstboxKomponenAnggaranGaji.getItems().clear();
        int no = 1;
        for (final PerekamanKomponenAnggaranBiayaGaji obj : dao.list()) {
            Listitem item = new Listitem();
            item.setValue(obj);
            item.appendChild(new Listcell(dao.selectKomponenPegawai(obj.getAdm()).getNm_stat_edu()));
            if (obj.getIsKomponenGaji().equalsIgnoreCase("Y")) {
                item.appendChild(new Listcell(dao.selectKomponeGaji(obj.getKodeKomponenGaji()).getNmKomponen()));
            } else {
                item.appendChild(new Listcell(obj.getKomponenDiluarGaji()));
            }
            item.appendChild(new Listcell(obj.getRumus()));

            Listcell cellAksi = new Listcell();
            Toolbarbutton btnUbah = new Toolbarbutton();
            btnUbah.setLabel("[ubah]");
            btnUbah.setId("btnUbah" + (no++));
            btnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    txtboxIdKomponen.setValue(obj.getIdKomponen() + "");
                    cmbboxTahunKomponen.setValue(obj.getTahunAnggaran());
                    if (obj.getIsKomponenGaji().equalsIgnoreCase("Y")) {
                        rdKomponenGajiYa.setSelected(true);
                        rdKomponenGajiTidak.setSelected(false);
                        txtboxNamaKomponen.setValue(dao.selectKomponeGaji(obj.getKodeKomponenGaji()).getNmKomponen());
                        txtboxKdKomponenGaji.setValue(obj.getKodeKomponenGaji());
                    } else {
                        rdKomponenGajiYa.setSelected(false);
                        rdKomponenGajiTidak.setSelected(true);
                        txtboxNamaKomponen.setValue(obj.getKomponenDiluarGaji());
                        txtboxKdKomponenGaji.setValue("");
                    }
                    cmbboxKomponenPegawai.setValue(dao.selectKomponenPegawai(obj.getAdm()).getNm_stat_edu());
                    idKomponenPegawai.setValue(obj.getAdm());
                    txtboxAlias.setValue(obj.getAlias());
                    txtboxRumus.setValue(obj.getRumus());
                    setDisableComponen(false);
                }
            });
            final Toolbarbutton btnHapus = new Toolbarbutton();
            btnHapus.setLabel("[hapus]");
            btnHapus.setId("btnHapus" + (no++));
            btnHapus.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    if (Messagebox.show("Apakah data akan dihapus?", "Konfirmasi", Messagebox.YES | Messagebox.NO, Messagebox.QUESTION) == Messagebox.YES) {
                        try {
                            dao.delete(obj);
                        } catch (Exception ex) {
                            Messagebox.show("Gagal menghapus data: " + ex.getMessage());
                        }
                        btnHapus.addForward(null, btnBatal, "onClick");
                    }
                }
            });
            cellAksi.appendChild(btnUbah);
            cellAksi.appendChild(new Space());
            cellAksi.appendChild(btnHapus);
            item.appendChild(cellAksi);
            lstboxKomponenAnggaranGaji.appendChild(item);
        }
    }

    public void btnSimpanOnClick() throws Exception {
        if (cmbboxTahunKomponen.getValue().isEmpty()) {
            Messagebox.show("Silahkan pilih Tahun Komponen", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        if (cmbboxKomponenPegawai.getValue().isEmpty()) {
            Messagebox.show("Silahkan pilih Komponen Pegawai", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        if (txtboxNamaKomponen.getValue().isEmpty()) {
            Messagebox.show("Silahkan pilih atau input nama Komponen", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        if (txtboxAlias.getValue().isEmpty()) {
            Messagebox.show("Silahkan input Alias", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
//        if (txtboxRumus.getValue().isEmpty()) {
//            Messagebox.show("Silahkan input Rumus", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
//            return;
//        }
        PerekamanKomponenAnggaranBiayaGaji obj = new PerekamanKomponenAnggaranBiayaGaji();
        obj.setTahunAnggaran(cmbboxTahunKomponen.getValue());
        if (rdKomponenGajiYa.isChecked()) {
            obj.setIsKomponenGaji("Y");
            obj.setKodeKomponenGaji(txtboxKdKomponenGaji.getValue());
        } else {
            obj.setIsKomponenGaji("N");
            obj.setKomponenDiluarGaji(txtboxNamaKomponen.getValue());
        }
        obj.setAdm(idKomponenPegawai.getValue());
        obj.setAlias(txtboxAlias.getValue());
        obj.setRumus(txtboxRumus.getValue());
        if (txtboxIdKomponen.getValue().isEmpty()) {
            if (dao.select(obj.getKodeKomponenGaji(), obj.getKomponenDiluarGaji(), obj.getAlias()).size() <= 0) {
                dao.insert(obj);
            } else {
                Messagebox.show("Data gagal disimpan, duplikasi data tidak diizinkan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                return;
            }
        } else {
            obj.setIdKomponen(Integer.valueOf(txtboxIdKomponen.getValue()));
            if (dao.selectUpdate(obj.getIdKomponen(), obj.getKodeKomponenGaji(), obj.getKomponenDiluarGaji(), obj.getAlias()).size() <= 0) {
                dao.update(obj);
            } else {
                Messagebox.show("Data gagal disimpan, duplikasi data tidak diizinkan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                return;
            }
        }
        clearComponen();
        loadKomponenAnggaranGaji();
        loadTahunAnggaran();
        Messagebox.show("Data tersimpan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);

    }

    public void cmbboxKomponenPegawaiOnSelect() throws Exception {
        KomponenPegawai kp = (KomponenPegawai) cmbboxKomponenPegawai.getSelectedItem().getValue();
        idKomponenPegawai.setValue(kp.getKd_stat_edu() + "");
    }

    public void btnBatalOnClick() throws Exception {
        clearComponen();
        setDisableComponen(false);
        loadKomponenAnggaranGaji();
    }

    public void btnCariNamaKomponenOnClick() throws Exception {
        final Window win = (Window) Executions.createComponents("/sippzul/perekamankomponenanggaranbiayagaji/KomponenGajiPopup.zul", this, null);
        win.doModal();
    }

    public void toolbarTambahKomponenOnClick() throws Exception {
        final Window win = (Window) Executions.createComponents("/sippzul/perekamankomponenanggaranbiayagaji/DaftarKomponenPopup.zul", this, null);
        win.doModal();
    }

    public void toolbarTambahSimbolOnClick() throws Exception {
        final Window win = (Window) Executions.createComponents("/sippzul/perekamankomponenanggaranbiayagaji/SimbolOperasiPopup.zul", this, null);
        win.doModal();
    }

    public void lstboxKomponenAnggaranGajiOnSelect() throws Exception {
        PerekamanKomponenAnggaranBiayaGaji obj = (PerekamanKomponenAnggaranBiayaGaji) lstboxKomponenAnggaranGaji.getSelectedItem().getValue();
        cmbboxTahunKomponen.setValue(obj.getTahunAnggaran());
        if (obj.getIsKomponenGaji().equalsIgnoreCase("Y")) {
            rdKomponenGajiYa.setSelected(true);
            rdKomponenGajiTidak.setSelected(false);
            txtboxNamaKomponen.setValue(dao.selectKomponeGaji(obj.getKodeKomponenGaji()).getNmKomponen());
            txtboxKdKomponenGaji.setValue(obj.getKodeKomponenGaji());
        } else {
            rdKomponenGajiYa.setSelected(false);
            rdKomponenGajiTidak.setSelected(true);
            txtboxNamaKomponen.setValue(obj.getKomponenDiluarGaji());
            txtboxKdKomponenGaji.setValue("");
        }
        cmbboxKomponenPegawai.setValue(dao.selectKomponenPegawai(obj.getAdm()).getNm_stat_edu());
        idKomponenPegawai.setValue(obj.getKodeKomponenGaji());
        txtboxAlias.setValue(obj.getAlias());
        txtboxRumus.setValue(obj.getRumus());
        setDisableComponen(true);
    }

    private void setDisableComponen(boolean status) {
        cmbboxTahunKomponen.setDisabled(status);
        cmbboxKomponenPegawai.setDisabled(status);
        rdKomponenGajiTidak.setDisabled(status);
        rdKomponenGajiYa.setDisabled(status);
        txtboxNamaKomponen.setDisabled(status);
        btnCariNamaKomponen.setDisabled(status);
        txtboxAlias.setDisabled(status);
        txtboxRumus.setDisabled(status);
    }
}

